package cn.wolfcode.service;

import cn.wolfcode.domain.Employee;
import cn.wolfcode.qo.QueryObject;
import com.github.pagehelper.PageInfo;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.List;
import java.util.Map;

public interface IEmployeeService {
    /**
     *插入员工
     * @param record
     * @return
     */
    int insertEmployee(Employee record);

    /**
     *删除员工
     * @param id
     * @return
     */
    int deleteEmployee(Long id);

    /**
     *修改员工
     * @param record
     * @return
     */
    int updateEmployee(Employee record);

    /**
     *查询单个员工信息
     * @param id
     * @return
     */
    Employee selectEmployee(Long id);

    /**
     *查询所有员工信息
     * @return
     */
    List<Employee> selectEmployeeList();

    /**
     * 分页过滤
     * @param qo 筛选条件
     * @return
     */

    PageInfo<Employee> query(QueryObject qo);


    /*
    * 插入员工角色中间表数据 和员工数据
    * */
    void saveEmpAndRole(Employee employee , Long[] roleIds);

    /*
     * 修改员工角色中间表数据 和员工数据
     * */
    void updateEmpAndRole(Employee employee , Long[] roleIds);

    /**
     * 查询用户密码是否正确
     * @param username 用户名
     * @param password 密码
     * @return
     */
    Employee selectUserExists(String username, String password , HttpServletRequest request);


    /**
     * 查询该员工权限
     * @param empId 员工id
     */
    List<String> selectEmployeePermission(Long empId);

    /**
     * 查询用户名是否存在 用于表单用户名校验
     * @param username 用户名
     * @return 员工对象
     */
    Employee checkUserName(String username);


    /**
     * 高级筛选下载
     * @param keyWord 名字和邮箱
     * @param deptId 部门
     * @return
     */
    Workbook exportXls(String keyWord, Long deptId);

    /**
     * 批量删除
     * @param ids 删除的id数
     */
    void deleteInBatches(Long[] ids);


    /**
     * 修改密码
     * @param password
     */
    void updatePassword(Long id, String password);

    List<String> importXls(MultipartFile file) throws IOException;

    void updateStatus(Long id);
}
